home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
utils
/
tweak16b
/
register.hpp
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-04
|
3KB
|
92 lines
/*
Register.hpp version 1.0
by Robert Schmidt of Ztiff Zox Softwear 1993
Declares the Register class, members defined in Register.cpp.
*/
#ifndef _Register_HPP
#define _Register_HPP
#include <iostream.h>
/*
xxxxADDR defines the base port number used to access VGA component xxxx,
and is defined for xxxx =
ATTRCON - Attribute Controller
MISC - Miscellaneous Register
VGAENABLE - VGA Enable Register
SEQ - Sequencer
GRACON - Graphics Controller
CRTC - Cathode Ray Tube Controller
STATUS - Status Register
*/
#define ATTRCON_ADDR 0x3c0
#define MISC_ADDR 0x3c2
#define VGAENABLE_ADDR 0x3c3
#define SEQ_ADDR 0x3c4
#define GRACON_ADDR 0x3ce
#define CRTC_ADDR 0x3d4
#define STATUS_ADDR 0x3da
// SVGA specific registers here:
#define CHIPSTECH 0x3d6
class Register
{
unsigned port;
unsigned char index;
unsigned char value;
public:
Register(unsigned p=0, unsigned char i=0, unsigned char v=0)
{ init(p,i,v); }
unsigned char init(unsigned p, unsigned char i, unsigned char v)
{ port = p; index = i; return value = v; }
unsigned char init(Register& r)
{ port = r.port; index = r.index; return value = r.value; }
void setPort(unsigned p) { port = p; }
void setIndex(unsigned char i) { index = i; }
void setValue(unsigned char v) { value = v; }
unsigned getPort(void) const { return port; }
unsigned char getIndex(void) const { return index; }
unsigned char getValue(void) const { return value; }
unsigned char operator++(void) { return value++; }
unsigned char operator--(void) { return value--; }
unsigned char operator++(int) { return ++value; }
unsigned char operator--(int) { return --value; }
unsigned char &operator *() { return value; }
unsigned char operator=(Register &r)
{ return init(r); }
unsigned operator() (int rbit, int len)
{ return (value >> rbit) & (1 << len)-1; }
void out();
unsigned char in();
friend istream& operator>> (istream&, Register&);
friend ostream& operator<< (ostream&, Register&);
};
class NamedRegister : public Register
{
char *name;
char enableFlag;
public:
NamedRegister() { doEnable(); }
~NamedRegister() { delete name; }
void doEnable() { enableFlag = 1; }
void doDisable() { enableFlag = 0; }
void toggleEnable() { enableFlag = !enableFlag; }
char isEnabled() { return enableFlag; }
char *getName() { return name; }
void printCon();
friend istream& operator>> (istream&, NamedRegister&);
};
#endif